package com.doraemon.controller.admin;

import com.doraemon.dto.CategoryDTO;
import com.doraemon.dto.CategoryPageQueryDTO;
import com.doraemon.entity.Category;
import com.doraemon.result.PageResult;
import com.doraemon.result.Result;
import com.doraemon.service.CategoryService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 分类管理Controller
 */
@RestController
@RequestMapping("/admin/category")
@Slf4j
@Api(tags = "分类相关接口")
public class CategoryController {

    @Autowired
    private CategoryService categoryService; // 注入分类Service层

    /***
     * 新增分类
     * ---
     * @param categoryDTO 分类DTO类（前端参数）
     * @return: com.doraemon.result.Result<java.lang.String>
     */
    @PostMapping()
    @ApiOperation("新增分类")
    public Result<String> addCategory(@RequestBody CategoryDTO categoryDTO) {
        log.info("新增分类：{}", categoryDTO);

        // 调用Service层 save 方法，新增分类
        categoryService.save(categoryDTO);

        return Result.success();
    }

    /***
     * 删除分类
     * ---
     * @param id 分类id
     * @return: com.doraemon.result.Result<java.lang.String>
     */
    @DeleteMapping()
    @ApiOperation("删除分类")
    public Result<String> deleteCategory(Long id) {
        log.info("删除分类：{}", id);

        // 调用Service层 deleteById 方法，删除分类
        categoryService.deleteById(id);

        return Result.success();
    }

    /***
     * 修改分类
     * ---
     * @param categoryDTO 分类DTO类（前端参数）
     * @return: com.doraemon.result.Result<java.lang.String>
     */
    @PutMapping()
    @ApiOperation("修改分类")
    public Result<String> updateCategory(@RequestBody CategoryDTO categoryDTO) {
        log.info("修改分类：{}", categoryDTO.getId());

        // 调用Service层 updateCategory 方法，修改分类
        categoryService.updateCategory(categoryDTO);

        return Result.success();
    }

    /***
     * 修改分类状态
     * ---
     * @param status 分类状态 0 禁用 1 启用
     * @param id 分类id
     * @return: com.doraemon.result.Result<java.lang.String>
     */
    @PostMapping("status/{status}")
    @ApiOperation("修改分类状态")
    public Result<String> updateStatus(@PathVariable Integer status, @RequestParam Long id) {
        if (status == 1) {
            log.info("分类状态修改：ID={}，状态=已启用", id);
        } else log.info("分类状态修改：ID={}，状态=已禁用", id);

        // 调用Service层 updateStatus 方法
        categoryService.updateStatus(status, id);

        return Result.success();
    }

    /***
     * 分页查询
     * ---
     * @param categoryPageQueryDTO 分类分页DTO类
     * @return: com.doraemon.result.Result<com.doraemon.result.PageResult>
     */
    @GetMapping("/page")
    @ApiOperation("分页查询")
    public Result<PageResult> page(CategoryPageQueryDTO categoryPageQueryDTO) {
        log.info("分类分页查询：页码 {},每页展示 {},名称 {},类别 {}",
                categoryPageQueryDTO.getPage(),
                categoryPageQueryDTO.getPageSize(),
                categoryPageQueryDTO.getName(),
                categoryPageQueryDTO.getType());

        // 调用Service层 pageQuery 方法，获取查询到的分页结果集对象pageResult
        PageResult pageResult = categoryService.pageQuery(categoryPageQueryDTO);

        return Result.success(pageResult);
    }

    /***
     * 根据类型查询分类
     * ---
     * @param type 分类类型 1为菜品分类，2为套餐分类
     * @return: com.doraemon.result.Result<java.util.List < com.doraemon.entity.Category>>
     */
    @GetMapping("/list")
    @ApiOperation("根据类型查询分类")
    public Result<List<Category>> list(Integer type) {
        log.info("根据类型查询分类：类型{}", type);

        // 调用Service层 getByType 方法，获取查询到的分类实体集合
        List<Category> list = categoryService.getListByType(type);

        return Result.success(list);
    }

}
